/**
 * @ Author:Yoann Meclot. MSay2
 * @ Created on:2020-09-02 15:44:37
 * @ Modified on: 2021-06-14 18:54:50
 *
 * @version 1.0
 */
/**
 * Copyright (c) 2020-2021 MSay2 (Yoann Meclot) - @msay2/tspoet
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { Modifier } from "./Modifier.js";
import { ObjectName } from "./ObjectName.js";
import { TSAnnotation } from "./TSAnnotation.js";
/**
 * TSField object allows you to write a field.
 *
 * Use static field to initialize the field to undefined value.
 *
 * @class `TSField`
 * @version 1.0
 */
export declare class TSField
{
    /**
     * Static field to init your field to undefined value.
     */
    public static UNDEFINED:string;
    
    /**
     * Build field.
     *
     * @param name The name of the field.
     * @type {TSField.Builder}
     * @since 1.0
     */
    public static fieldBuilder(name:string):TSField.Builder;

    public static Builder:{
        new (name:string):{
            /**
             * Add modifiers.
             *
             * @param modifiers The modifiers to be added.
             * @throws {TSPoetException} Check if the modifiers is undefined or null.
             * @type {TSField.Builder}
             * @since 1.0
             */
            addModifiers(...modifiers:Modifier[]):TSField.Builder;

            /**
             * add annotation.
             *
             * @param tsAnnotation The annotation to be added.
             * @throws {TSPoetException} Check if the annotation is undefined or null.
             * @type {TSField.Builder}
             * @since 1.0
             */
            addAnnotation(tsAnnotation:TSAnnotation):TSField.Builder;

            /**
             * Add a documentation.
             *
             * @param arg Your comment.
             * @type {TSField.Builder}
             * @since 1.2
             */
            addDoc(arg:string):TSField.Builder;

            /**
             * Specify a return type.
             *
             * @param objectName The return type.
             * @throws {TSPoetException} Check if the ObjectName object is undefined or null.
             * @type {TSField.Builder}
             * @since 1.0
             */
            return(objectName:ObjectName):TSField.Builder;

            /**
             * Set a value.
             *
             * @param value The value of the field.
             * @type {TSField.Builder}
             * @since 1.0
             */
            setValue(value:any):TSField.Builder;

            /**
             * Build field.
             *
             * @throws {TSPoetException} Check if the name is undefined or null.
             * @throws {TSPoetException} Check if the type is undefined or null.
             * @type {TSField}
             * @since 1.0
             */
            build():TSField;
        };
    };
    
    private constructor(builder:TSField.Builder);
}
export declare namespace TSField
{
    type Builder = InstanceType<typeof TSField.Builder>;
}
//# sourceMappingURL=TSField.d.ts.map